legacy.tsx 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { JwtSecretUpdateError, JwtSecretUpdateStatus } from '@supabase/shared-types/out/events'
  2. import { useQueryClient } from '@tanstack/react-query'
  3. import { useParams } from 'common'
  4. import { useEffect, useRef } from 'react'
  5. import { toast } from 'sonner'
  6. import { JWTSettings } from '@/components/interfaces/JwtSecrets/jwt-settings'
  7. import { JWT_SECRET_UPDATE_ERROR_MESSAGES } from '@/components/interfaces/JwtSecrets/jwt.constants'
  8. import DefaultLayout from '@/components/layouts/DefaultLayout'
  9. import JWTKeysLayout from '@/components/layouts/JWTKeys/JWTKeysLayout'
  10. import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout'
  11. import { UnknownInterface } from '@/components/ui/UnknownInterface'
  12. import { useJwtSecretUpdatingStatusQuery } from '@/data/config/jwt-secret-updating-status-query'
  13. import { configKeys } from '@/data/config/keys'
  14. import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
  15. import type { NextPageWithLayout } from '@/types'
  16. const JWTKeysLegacyPage: NextPageWithLayout = () => {
  17. const client = useQueryClient()
  18. const { ref: projectRef } = useParams()
  19. const { projectSettingsLegacyJwtKeys } = useIsFeatureEnabled(['project_settings:legacy_jwt_keys'])
  20. const { data } = useJwtSecretUpdatingStatusQuery(
  21. { projectRef },
  22. { enabled: projectSettingsLegacyJwtKeys }
  23. )
  24. const jwtSecretUpdateStatus = data?.jwtSecretUpdateStatus
  25. const jwtSecretUpdateError = data?.jwtSecretUpdateError
  26. const previousJwtSecretUpdateStatus = useRef<JwtSecretUpdateStatus>(undefined)
  27. const { Failed, Updated, Updating } = JwtSecretUpdateStatus
  28. const jwtSecretUpdateErrorMessage =
  29. JWT_SECRET_UPDATE_ERROR_MESSAGES[jwtSecretUpdateError as JwtSecretUpdateError]
  30. useEffect(() => {
  31. if (previousJwtSecretUpdateStatus.current === Updating) {
  32. switch (jwtSecretUpdateStatus) {
  33. case Updated:
  34. client.invalidateQueries({ queryKey: configKeys.api(projectRef) })
  35. client.invalidateQueries({ queryKey: configKeys.settings(projectRef) })
  36. client.invalidateQueries({ queryKey: configKeys.postgrest(projectRef) })
  37. toast.success('Successfully updated JWT secret')
  38. break
  39. case Failed:
  40. toast.error(`JWT secret update failed: ${jwtSecretUpdateErrorMessage}`)
  41. break
  42. }
  43. }
  44. previousJwtSecretUpdateStatus.current = jwtSecretUpdateStatus
  45. }, [jwtSecretUpdateStatus])
  46. if (!projectSettingsLegacyJwtKeys) {
  47. return <UnknownInterface urlBack={`/project/${projectRef}/settings/jwt/signing-keys`} />
  48. }
  49. return (
  50. <JWTKeysLayout>
  51. <JWTSettings />
  52. </JWTKeysLayout>
  53. )
  54. }
  55. JWTKeysLegacyPage.getLayout = (page) => (
  56. <DefaultLayout>
  57. <SettingsLayout title="jwt keys (legacy)">{page}</SettingsLayout>
  58. </DefaultLayout>
  59. )
  60. export default JWTKeysLegacyPage